package com.liming.auth.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.liming.common.pojo.dto.authinfo.UserPageQuery;
import com.liming.common.pojo.dto.authinfo.UsernameLoginDTO;
import com.liming.common.pojo.dto.authinfo.mini.UpdateUserInfoDTO;
import com.liming.common.pojo.dto.authinfo.mini.UpdateUserPwdDTO;
import com.liming.common.pojo.entity.authinfo.User;
import com.liming.common.pojo.vo.PageVO;
import com.liming.common.pojo.vo.authinfo.UserVO;
import com.liming.common.pojo.vo.authinfo.mini.MiniUserInfoVO;
import com.liming.common.pojo.vo.dashboard.UserRegister;

import java.util.List;
import java.util.Map;

/**
 * @author liming
 * @date 2025/1/8
 */
public interface UserAuthService extends IService<User> {

    /**
     * 用户注册统计
     *
     * @param scope 时间范围
     * @return List<UserRegister>
     */
    List<UserRegister> registerDateCount(String scope);

    /**
     * 微信一键登录
     *
     * @param code 微信返回的code
     * @return Token
     */
    String loginWithWxMini(String code);

    /**
     * 用户名登录 - 用户
     *
     * @param usernameLoginDTO 用户名登录信息
     * @return Token
     */
    String loginWithUsername(UsernameLoginDTO usernameLoginDTO);

    /**
     * 登出
     *
     * @return Boolean
     */
    Boolean logout();

    /**
     * 用户分页 - 后台管理
     *
     * @param query 分页参数
     * @return PageVO
     */
    PageVO<UserVO> adminUserPage(UserPageQuery query);

    /**
     * 根据id更新用户锁定状态
     *
     * @param id 用户id
     * @return 是否更新成功
     */
    Boolean updateLockedById(Long id);

    /**
     * 根据id更新用户激活状态
     *
     * @param id 用户id
     * @return 是否更新成功
     */
    Boolean updateActiveById(Long id);

    /**
     * 所有用户行为分数
     *
     * @return Map<用户ID, 用户分数>
     */
    Map<Long, Double> activityScore();

    /**
     * 系统用户数量
     *
     * @return 用户数量
     */
    Long userCount();

    /**
     * 用户性别统计
     *
     * @return Map<性别, 数量>
     */
    Map<Integer, Long> userGender();

    /**
     * 系统所有用户ID, 昵称
     *
     * @return Map<Long, String>
     */
    Map<Long, String> userIdsAndNickname();

    /**
     * 根据用户id集合获取用户id和头像
     *
     * @param userIds 用户id集合
     * @return Map<Long, String>
     */
    Map<Long, String> idAndAvatarMapByIds(List<Long> userIds);

    /**
     * 用户id和头像Map
     *
     * @return Map<Long, String>
     */
    Map<Long, String> idAndAvatarMap();

    /**
     * 获取登录用户 微信openid
     *
     * @return openid
     */
    String loginOpenid();

    /**
     * 小程序 - 用户信息
     *
     * @return 用户信息
     */
    MiniUserInfoVO info();

    /**
     * 小程序 - 更新用户信息
     *
     * @param updateUserInfoDTO 更新用户信息
     * @return 更新是否成功
     */
    Boolean updateInfo(UpdateUserInfoDTO updateUserInfoDTO);

    /**
     * 小程序 - 更新用户密码
     *
     * @param updateUserPwdDTO 更新用户密码
     * @return 是否更新成功
     */
    Boolean updatePassword(UpdateUserPwdDTO updateUserPwdDTO);
}
